<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//Ultima verificacion: 23-11-2014 ; 23-02-2015
class Persona extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todas las personas activas o inactivas pero NO las borradas (-1)
	function consultar(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Cargo el modelo donde estan los datos de las personas registradas para pedirle un listado con todas ellas
			$this->load->model('m_persona');
			
			//Busco todas las personas activas o inactivas, pero no las borradas.
			$listadoPersonas = $this->m_persona->buscar();
			
			//Le paso el listado de todas las personas a la vista para que las muestre en una tabla
			$datos['personas'] = $listadoPersonas;
			
			//Cargo la vista donde se muestra la tabla de personas y la guardo en una variable para pasarsela a la vista principal
			$datosPrincipal['vista'] = $this->load->view('v_personas', $datos, true);
			
			//Cargo la vista principal con los datos de la vista recien generada
			$this->load->view('v_sistema', $datosPrincipal);
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todas las personas activas o inactivas pero NO las borradas (-1) en formato XML
	function exportar(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Cargo el modelo donde estan los datos de las personas registradas para pedirle un listado con todas ellas
			$this->load->model('m_persona');
			
			//Busco todas las personas activas o inactivas, pero no las borradas.
			$listadoPersonas = $this->m_persona->buscar();
			
			//Le paso el listado de todas las personas a la vista para que las muestre en un archivo xml
			$datos['personas'] = $listadoPersonas;
			
			//Cargo el modelo donde estan los datos de las instituciones
			$this->load->model('m_institucion');
			
			//Busco a la institucion que hay que visualizar
			$institucion = $this->m_institucion->get(1);
			
			//Le paso la institucion a visualizar a la vista
			$datos['institucion'] = $institucion;
			
			//Cargo la vista donde se muestra la tabla de personas en formato XML
			$datosPrincipal['vista'] = $this->load->view('v_personas_xml', $datos);
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	//Sirve para eliminar la persona pasada por la url
	function eliminar($idPersona=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Segunda comprobacion: Que idPersona pasado sea numerico y mayor que cero.
			if(is_numeric($idPersona) && $idPersona>0){
				//Cargo el modelo donde estan los datos de las personas registradas
				$this->load->model('m_persona');
				
				//Busco a la persona que hay que eliminar
				$persona = $this->m_persona->get($idPersona);
				
				//Tercera comprobacion: Que la persona pasada por la url sea existente
				if($persona->num_rows() == 1){
					//Elimino a la persona pasada por la url
					$respuesta = $this->m_persona->eliminar($idPersona, $this->session->userdata('idUsuarioLog'));
					
					//Busco todas las personas activas o inactivas, pero no las borradas (-1) que quedaron
					$listadoPersonas = $this->m_persona->buscar();
					
					//Le paso el listado de todas las personas a la vista para que las muestre en una tabla
					$datos['personas'] = $listadoPersonas;
					
					//Cargo la vista donde se muestra la tabla de personas
					$this->load->view('v_personas', $datos);
				} else {
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					echo("No existe el registro seleccionado para borrar.");
				}
			} else {
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se ha pasado los parametros necesarios para borrar un registro.");
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un registro.");
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Abre la pantalla con el formulario para crear una persona(0) y/o directivo(1), docente (2), alumno (3), tutor (4) y usuario (5) nuevo
	function abrirPantallaCrear($tipoPersona=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Segunda comprobacion: Que tipoPersona pasado sea numerico y mayor o igual que cero y menor o igual que cinco.
			if(is_numeric($tipoPersona) && $tipoPersona>=0 && $tipoPersona<=5){
				//Le paso a la vista el tipo de persona a crear para poder volver al consultar correcto
				$datos['tipoPersonaSel'] = $tipoPersona;
				
				//--------------------------------------------------------------------------------------------------------------------------------------------
				//Cargo el modelo donde estan los datos de los tipos de documentos registrados
				$this->load->model('m_tipo_documento');
				
				//Busco todos los tipos de documentos activos
				$listadoTiposDocumentos = $this->m_tipo_documento->buscarActivos();
				
				//Le paso el listado de todos los tipos de documentos a la vista para que las muestre en la lista seleccionable
				$datos['tiposDocumentos'] = $listadoTiposDocumentos;
				
				//--------------------------------------------------------------------------------------------------------------------------------------------
				//Cargo el modelo donde estan los datos de las provincias
				$this->load->model('m_provincia');
				
				//Busco a todas las provincias activas.
				$provincias = $this->m_provincia->buscarActivos();
				
				//Le paso todas las provincias a la vista
				$datos['provincias'] = $provincias;
				
				//--------------------------------------------------------------------------------------------------------------------------------------------
				//Cargo el modelo donde estan los datos de los cargos directivos
				$this->load->model('m_cargo_directivo');
				
				//Busco a todos los cargos directivos activos
				$cargosDirectivos = $this->m_cargo_directivo->buscarActivos();
				
				//Le paso todos los cargos directivos a la vista
				$datos['cargosDirectivos'] = $cargosDirectivos;
				
				//--------------------------------------------------------------------------------------------------------------------------------------------
				//Cargo la vista donde se muestra el formulario para crear una persona y la guardo en una variable para pasarsela a la vista principal
				$datosPrincipal['vista'] = $this->load->view('v_personas_crear',$datos, true);
				
				//Cargo la vista principal con los datos de la vista para crear una persona
				$this->load->view('v_sistema', $datosPrincipal);
			} else {
				//Los parametros pasados no son validos para crear un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}		
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo crea realmente la persona y el directivo, docente, alumno, tutor y usuario según si debe o no crearlo. 
	//La respuesta se muestra en un iframe dentro del formulario
	function crear(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){	   
			//Segunda comprobacion: Que se haya pasado por post el apellido, nombre, abreviatura, sexo y el estado de la persona a crear.
			if($this->input->post('apellido',true) != "" && $this->input->post('nombre',true) != "" &&  $this->input->post('abreviatura',true) != "" && ($this->input->post('sexo',true) == '1' || $this->input->post('sexo',true) == '0') && ($this->input->post('estadoPersona',true) == '1' || $this->input->post('estadoPersona',true) == '0')){
				$mensaje = "";
				
				//Cargo el modelo donde estan los datos de los archivos
				$this->load->model('m_archivo');
				
				//Detalles de las configuraciones del archivo a subir (foto en este caso)
				$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/personas/fotos";
				$config['allowed_types'] = 'gif|jpg|png|jpeg';
				$config['max_size'] = '10000';
				$this->load->library('upload', $config);
				
				$ultimoIdInsertado = 0;
				$foto = '';
				//Si no se subio la foto hacer lo siguiente
				if (!$this->upload->do_upload('foto')){
					$mensaje = 'No se ha subido ninguna foto o su foto est\u00e1 fuera de las especificaciones.';
				//Si se subio la foto hacer lo siguiente
				}else{
					//Datos del archivo subido (foto)
					$upload_data = $this->upload->data();
					$foto = $upload_data['file_name'];
					$extensionArchivo = $upload_data['file_ext'];
					
					//Mensaje que se va a mostrar
					$mensaje = 'Se ha subido la foto correctamente.';
					
					// Determine Content Type
					switch ($upload_data['file_ext']){
					  case ".pdf": $ctype="application/pdf"; break; 
					  case ".exe": $ctype="application/octet-stream"; break; 
					  case ".zip": $ctype="application/zip"; break; 
					  case ".doc": $ctype="application/msword"; break; 
					  case ".xls": $ctype="application/vnd.ms-excel"; break; 
					  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
					  case ".gif": $ctype="image/gif"; break;
					  case ".png": $ctype="image/png"; break;
					  case ".jpeg":
					  case ".jpg": $ctype="image/jpg"; break;
					  default: $ctype="application/force-download";
					}
					
					//Creamos el archivo en la base de datos
					$resultado = $this->m_archivo->crear(random_string('alnum',20).$upload_data['file_ext'], $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/personas/fotos", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
					$ultimoIdInsertado = $this->db->insert_id();
				}
				
				//Cargo el modelo donde estan los datos de las personas
				$this->load->model('m_persona');
				
				//Formato fecha ARGENTINA
				$fecha1=$this->input->post('fechaNacimiento',true);
				//Formato fecha EEUU
				if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
				else $fecha2=null;
				
				//Creamos la persona
				$resultado = $this->m_persona->crear($this->input->post('apellido',true),
													 $this->input->post('nombre',true),
													 $this->input->post('abreviatura',true),
													 $this->input->post('tipoDocumento',true),
													 $this->input->post('numeroDocumento',true),
													 $fecha2,
													 $this->input->post('localidad',true),
													 $this->input->post('domicilio',true),
													 $this->input->post('telefonoFijo',true),
													 $this->input->post('telefonoCelular',true),
													 $this->input->post('email',true),
													 $this->input->post('facebook',true),
													 $ultimoIdInsertado,
													 $this->input->post('sexo',true),
													 $this->input->post('descripcion',true),
													 $this->input->post('estadoPersona',true),
													 $this->session->userdata('idUsuarioLog'),
													 random_string('alnum',20));
				
				//Si se creó la persona vemos si hay q crear los otros tipos de personas
				if($resultado == 1){
					//Si la persona se ha creado correctamente, creamos los demas registros en la base de datos segun si es directivo, docente, alumno o tutor y el usuario.
					$ultimoIdInsertado = $this->db->insert_id();
					
					//Segunda comprobacion: Que se haya pasado por post si se debe crear el directivo, el cargo directivo y el estado del directivo a crear.
					if($this->input->post('esDirectivo',true)=="1" && is_numeric($this->input->post('cargoDirectivo',true)) && $this->input->post('cargoDirectivo',true)>0 && ($this->input->post('estadoDirectivo',true) == '1' || $this->input->post('estadoDirectivo',true) == '0')){
						//Cargo el modelo donde estan los datos de los directivos
						$this->load->model('m_directivo');
						
						//Creamos el directivo
						$resultado = $this->m_directivo->crear($ultimoIdInsertado,
															   $this->input->post('cargoDirectivo',true),
															   $this->input->post('estadoDirectivo',true),
															   $this->session->userdata('idUsuarioLog'));
															   
						if($resultado==1)
							$mensaje .= " Se ha creado el directivo correctamente.";
						else
							$mensaje .= " No se ha creado el directivo. Ha habido un error.";
					}
					
					//Segunda comprobacion: Que se haya pasado por post si se debe crear el docente, el trato, los colores y el estado del docente a crear.
					if($this->input->post('esDocente',true)=="1" && $this->input->post('trato',true) != "" && $this->input->post('colorpicker1',true)!="" && $this->input->post('colorpicker2',true)!="" && ($this->input->post('estadoDocente',true) == '1' || $this->input->post('estadoDocente',true) == '0')){
						//Detalles de las configuraciones del archivo a subir (un documento en este caso)
						$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/docentes";
						$config['allowed_types'] = 'doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
						$config['max_size'] = '10000';
						$this->load->library('upload', $config);
						$this->upload->initialize($config);
						
						$ultimoIdInsertado2 = 0;
						$archivo = '';
						//Si no se subio el archivo hacer lo siguiente
						if (!$this->upload->do_upload('curriculum')){
							$mensaje .= ' No se ha subido ning\u00fan archivo curriculum o su archivo est\u00e1 fuera de las especificaciones.';
						//Si se subio el archivo hacer lo siguiente
						}else{
							//Datos del archivo subido
							$upload_data = $this->upload->data();
							$archivo = $upload_data['file_name'];
							$extensionArchivo = $upload_data['file_ext'];
							
							//Mensaje que se va a mostrar
							$mensaje .= ' Se ha subido el curriculum correctamente.';
							
							// Determine Content Type
							switch ($upload_data['file_ext']){
							  case ".pdf": $ctype="application/pdf"; break; 
							  case ".exe": $ctype="application/octet-stream"; break; 
							  case ".zip": $ctype="application/zip"; break; 
							  case ".doc": $ctype="application/msword"; break; 
							  case ".xls": $ctype="application/vnd.ms-excel"; break; 
							  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
							  case ".gif": $ctype="image/gif"; break; 
							  case ".png": $ctype="image/png"; break; 
							  case ".jpeg": 
							  case ".jpg": $ctype="image/jpg"; break; 
							  default: $ctype="application/force-download"; 
							}
							
							//Creamos el archivo en la base de datos
							$resultado = $this->m_archivo->crear(random_string('alnum',20).$upload_data['file_ext'], $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/docentes", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
							$ultimoIdInsertado2 = $this->db->insert_id();
						}
						
						//Cargo el modelo donde estan los datos de los docentes
						$this->load->model('m_docente');
						
						//Formato fecha ARGENTINA
						$fecha1=$this->input->post('fechaIngresoDocente',true);
						//Formato fecha EEUU
						if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
						else $fecha2=null;
						
						//Creamos el docente
						$resultado = $this->m_docente->crear($ultimoIdInsertado,
															 $this->input->post('trato',true),
															 $this->input->post('colorpicker1',true),
															 $this->input->post('colorpicker2',true),
															 $fecha2,
															 $ultimoIdInsertado2,
															 $this->input->post('estadoDocente',true),
															 $this->session->userdata('idUsuarioLog'));
						if($resultado==1)
							$mensaje .= " Se ha creado el docente correctamente.";
						else
							$mensaje .= " No se ha creado el docente. Ha habido un error.";
					}
					
					//Segunda comprobacion: Que se haya pasado por post si se debe crear el alumno y el estado del alumno a crear.
					if($this->input->post('esAlumno',true)=="1"  && ($this->input->post('estadoAlumno',true) == '1' || $this->input->post('estadoAlumno',true) == '0')){
						//Cargo el modelo donde estan los datos de los alumnos
						$this->load->model('m_alumno');
						
						//Formato fecha ARGENTINA
						$fecha1=$this->input->post('fechaIngresoAlumno',true);
						//Formato fecha EEUU
						if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
						else $fecha2=null;
						
						//Creamos el alumno
						$resultado = $this->m_alumno->crear($ultimoIdInsertado,
															 $this->input->post('legajo',true),
															 $fecha2,
															 $this->input->post('estadoAlumno',true),
															 $this->session->userdata('idUsuarioLog'));
						if($resultado==1)
							$mensaje .= " Se ha creado el alumno correctamente.";
						else
							$mensaje .= " No se ha creado el alumno. Ha habido un error.";
					}
					
					//Segunda comprobacion: Que se haya pasado por post si se debe crear el tutor y el estado del tutor a crear.
					if($this->input->post('esTutor',true)=="1"  && ($this->input->post('estadoTutor',true) == '1' || $this->input->post('estadoTutor',true) == '0')){
						//Cargo el modelo donde estan los datos de los tutores
						$this->load->model('m_tutor');
						
						//Creamos el tutor
						$resultado = $this->m_tutor->crear($ultimoIdInsertado,
														   $this->input->post('estadoTutor',true),
														   $this->session->userdata('idUsuarioLog'));
														   
						if($resultado==1)
							$mensaje .= " Se ha creado el tutor correctamente.";
						else
							$mensaje .= " No se ha creado el tutor. Ha habido un error.";
					}
					
					//Segunda comprobacion: Que se haya pasado por post el nombre, password y el estado del usuario a crear.
					//Y que el usuario no este creado ya en la db
					if($this->input->post('nombreUsuario',true) != "" && $this->input->post('password',true) != "" && strlen($this->input->post('password',true))>=6 && ($this->input->post('estadoUsuario',true) == '1' || $this->input->post('estadoUsuario',true) == '0')){
						//Cargo el modelo donde estan los datos de los usuarios
						$this->load->model('m_usuario');
						
						//Creamos el usuario
						$resultado = $this->m_usuario->crear($ultimoIdInsertado,
														   $this->input->post('nombreUsuario',true),
														   $this->input->post('password',true),
														   $this->input->post('permisoAlumno',true),
														   $this->input->post('permisoTutor',true),
														   $this->input->post('permisoDocente',true),
														   $this->input->post('permisoDirectivo',true),
														   $this->input->post('permisoDirectivo',true),
														   $this->input->post('permisoDirectivo',true),
														   $this->input->post('permisoDirectivo',true),
														   0,
														   $this->input->post('estadoUsuario',true),
														   $this->session->userdata('idUsuarioLog'));
						
						if($resultado==1)
							$mensaje .= " Se ha creado el usuario correctamente.";
						else
							$mensaje .= " No se ha creado el usuario. Ha habido un error.";						
					}
					
					echo("<script> alert('La persona: ".$this->input->post('apellido',true).", ".$this->input->post('nombre',true)." se ha creado correctamente. ".$mensaje."');</script>");
				}else{
					echo("<script> alert('La persona: ".$this->input->post('apellido',true).", ".$this->input->post('nombre',true)." no se ha creado. Ha habido un error.');</script>");
				}
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos de la persona pasada por la url
	function abrirPantallaModificar($tipoPersona=null, $idPersona=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Segunda comprobacion: Que tipoPersona pasado sea numerico y mayor o igual que cero y menor o igual que 5. Que idPersona pasado sea numerico y mayor que cero.
			if(is_numeric($tipoPersona) && $tipoPersona>=0 && $tipoPersona<=5 && is_numeric($idPersona) && $idPersona>0){
				//Cargo el modelo donde estan los datos de las personas
				$this->load->model('m_persona');
				
				//Busco a la persona que hay que modificar
				$persona = $this->m_persona->get($idPersona);
				
				//Tercera comprobacion: Que la persona pasada por la url sea existente
				if($persona->num_rows() == 1){
					//Le paso la persona a modificar a la vista
					$datos['personaSel'] = $persona;
					
					//--------------------------------------------------------------------------------------------------------------------------------------------
					//Le paso a la vista el tipo de persona a modificar para poder volver al consultar correcto y abrir la pestaña correcta
					$datos['tipoPersonaSel'] = $tipoPersona;
					
					//Si el tipo de persona es "PERSONA" entonces buscamos la persona siguiente y anterior.
					if($tipoPersona == 0){
						//Busco a la persona siguiente de la que hay que modificar
						$idPersonaSig = $this->m_persona->getContiguo($idPersona,1);
										
						//Le paso la persona siguiente de la que hay que modificar a la vista
						$datos['idPersonaSig'] = $idPersonaSig;
						
						//Busco la persona anterior de la que hay que modificar
						$idPersonaAnt = $this->m_persona->getContiguo($idPersona,-1);
										
						//Le paso la persona anterior de la que hay que modificar a la vista
						$datos['idPersonaAnt'] = $idPersonaAnt;
					}
					
					//--------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de los directivos para buscar los datos si es que es directivo
					$this->load->model('m_directivo');
					
					//Busco al directivo que hay que modificar si es que lo es
					$directivo = $this->m_directivo->get2($idPersona);
					
					//Le paso el directivo a modificar a la vista
					$datos['directivoSel'] = $directivo;
					
					//--------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de los docentes para buscar los datos si es que es docente
					$this->load->model('m_docente');
					
					//Busco al docente que hay que modificar si es que lo es
					$docente = $this->m_docente->get2($idPersona);
					
					//Le paso el docente a modificar a la vista
					$datos['docenteSel'] = $docente;
					
					//--------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de los alumnos para buscar los datos si es que es alumno
					$this->load->model('m_alumno');
					
					//Busco al alumno que hay que modificar si es que lo es
					$alumno = $this->m_alumno->get2($idPersona);
					
					//Le paso el alumno a modificar a la vista
					$datos['alumnoSel'] = $alumno;
					
					//--------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de los tutores para buscar los datos si es que es tutor
					$this->load->model('m_tutor');
					
					//Busco al tutor que hay que modificar si es que lo es
					$tutor = $this->m_tutor->get2($idPersona);
					
					//Le paso el tutor a modificar a la vista
					$datos['tutorSel'] = $tutor;
					
					//--------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de los usuarios para buscar los datos si es que es usuario
					$this->load->model('m_usuario');
					
					//Busco al usuario que hay que modificar si es que lo es
					$usuario = $this->m_usuario->get2($idPersona);
					
					//Le paso el usuario a modificar a la vista
					$datos['usuarioSel'] = $usuario;
															
					//--------------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de los tipos de documentos registrados
					$this->load->model('m_tipo_documento');
					
					//Busco todos los tipos de documentos y no solo los activos
					$listadoTiposDocumentos = $this->m_tipo_documento->buscar();
					
					//Le paso el listado de todos los tipos de documentos a la vista para que las muestre en la lista seleccionable
					$datos['tiposDocumentos'] = $listadoTiposDocumentos;				
					
					//--------------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de las provincias
					$this->load->model('m_provincia');
					
					//Busco a todas las provincias y no solo las activas.
					$provincias = $this->m_provincia->buscar();
					
					//Le paso todas las provincias a la vista
					$datos['provincias'] = $provincias;
					
					//--------------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de las localidades
					$this->load->model('m_localidad');
					
					$idProvincia = 0;
					if(is_numeric($persona->row()->idProvincia))
						$idProvincia = $persona->row()->idProvincia;
					
					//Busco a todas las localidades de la provincia de la persona
					$localidades = $this->m_localidad->buscar(" AND localidad.idProvincia=".$idProvincia);
					
					//Le paso todas las localidades a la vista
					$datos['localidades'] = $localidades;
					
					//--------------------------------------------------------------------------------------------------------------------------------------------
					//Cargo el modelo donde estan los datos de los cargos directivos
					$this->load->model('m_cargo_directivo');
					
					//Busco a todos los cargos directivos y no solo los activos
					$cargosDirectivos = $this->m_cargo_directivo->buscar();
					
					//Le paso todos los cargos directivos a la vista
					$datos['cargosDirectivos'] = $cargosDirectivos;
					
					//--------------------------------------------------------------------------------------------------------------------------------------------
					//Cargo la vista donde se muestra el formulario para modificar una persona y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_personas_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar una persona
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica los datos de una persona
	function modificar($idPersona=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){	   
			//Segunda comprobacion: Que se haya pasado por post el apellido, nombre, abreviatura y el estado de la persona a modificar.
			//Ademas que se haya pasado por la url el id de la persona a modificar
			if(is_numeric($idPersona) && $idPersona>0 && $this->input->post('apellido',true) != "" && $this->input->post('nombre',true) != "" &&  $this->input->post('abreviatura',true) != "" && ($this->input->post('sexo',true) == '1' || $this->input->post('sexo',true) == '0') && ($this->input->post('estadoPersona',true) == '1' || $this->input->post('estadoPersona',true) == '0')){
				//Cargo el modelo donde estan los datos de las personas
				$this->load->model('m_persona');
				
				//Busco a la persona que hay que modificar
				$persona = $this->m_persona->get($idPersona);
				
				//Tercera comprobacion: Que la persona pasada por la url sea existente
				if($persona->num_rows() == 1){
					//Guardamos el id del archivo actual. Cero si no tiene asignado ninguno
					$idArchivoFotoActual = $persona->row()->idArchivoFoto;
									
					//Resultado 0 quiere decir que nada se ha modificado
					$resultado = 0;
					
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones del archivo a subir (foto en este caso)
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/personas/fotos";
					$config['allowed_types'] = 'gif|jpg|png|jpeg';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$foto = '';
					//Si no se subio la foto hacer lo siguiente
					if (!$this->upload->do_upload('foto')){
						$mensaje = 'No se ha subido ninguna foto o su foto est\u00e1 fuera de las especificaciones.';
					//Si se subio la foto hacer lo siguiente
					}else{
						//Datos del archivo subido (foto)
						$upload_data = $this->upload->data();
						$foto = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido la foto correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']){
						  case ".pdf": $ctype="application/pdf"; break; 
						  case ".exe": $ctype="application/octet-stream"; break; 
						  case ".zip": $ctype="application/zip"; break; 
						  case ".doc": $ctype="application/msword"; break; 
						  case ".xls": $ctype="application/vnd.ms-excel"; break; 
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break;
						  case ".png": $ctype="image/png"; break;
						  case ".jpeg":
						  case ".jpg": $ctype="image/jpg"; break;
						  default: $ctype="application/force-download";
						}
						
						//Si ya tenia archivo lo modificamos, si no tenia, creamos un nuevo registro en la base de datos
						$nuevoHash = random_string('alnum',20).$upload_data['file_ext'];
																		
						if($idArchivoFotoActual != 0){
							//Modificamos el archivo en la base de datos
							$resultado += $this->m_archivo->modificar($idArchivoFotoActual, $nuevoHash, $upload_data['file_name'], $upload_data['file_ext'], $ctype);
						}else{
							//Creamos el archivo en la base de datos
							$resultado += $this->m_archivo->crear($nuevoHash, $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/personas/fotos", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
							$idArchivoFotoActual = $this->db->insert_id();
						}
					}
					
					//Formato fecha ARGENTINA
					$fecha1=$this->input->post('fechaNacimiento',true);
					//Formato fecha EEUU
					if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
					else $fecha2=null;
					
					//Modificamos la persona
					$resultado += $this->m_persona->modificar($idPersona,
															 $this->input->post('apellido',true),
															 $this->input->post('nombre',true),
															 $this->input->post('abreviatura',true),
															 $this->input->post('tipoDocumento',true),
															 $this->input->post('numeroDocumento',true),
															 $fecha2,
															 $this->input->post('localidad',true),
															 $this->input->post('domicilio',true),
															 $this->input->post('telefonoFijo',true),
															 $this->input->post('telefonoCelular',true),
															 $this->input->post('email',true),
															 $this->input->post('facebook',true),
															 $idArchivoFotoActual,
															 $this->input->post('sexo',true),													 												 
															 $this->input->post('descripcion',true),													
															 $this->input->post('estadoPersona',true));
															 
					if($foto != '')	echo("<script> window.parent.actualizarImagen('".base_url() .'archivo/hash/'.$nuevoHash."');</script>");
					
					if($resultado >= 1){
						echo("<script> alert('La persona: ". $this->input->post('apellido',true) .", ". $this->input->post('nombre',true)." se ha modificado correctamente.');</script>");
					}else{
						echo("<script> alert('La persona: ". $this->input->post('apellido',true) .", ". $this->input->post('nombre',true)." no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todas las notificaciones de la persona logueada
	//Filtros:
	//Si idCicloLectivo es igual a cero, hay que mostrar todas las notificaciones existentes del ciclo vigente. Nada si no hay ciclo vigente.
	//Si idCicloLectivo es distinto de cero, hay que mostrar solo las notificaciones del ciclo en cuestion.
	function misNotificaciones($idCicloLectivo=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		//Todas las personas pueden recibir notificaciones por lo que no se requieren permisos extras.
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Segunda comprobacion: Que idCicloLectivo pasado sea numerico y mayor o igual que cero. Que idPersonaLog sea mayor que cero.
			if(is_numeric($idCicloLectivo) && $idCicloLectivo>=0 && is_numeric($this->session->userdata('idPersonaLog')) && $this->session->userdata('idPersonaLog')>0){
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para corroborar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Tercera comprobacion: Que el ciclo lectivo pasado por la url sea existente o bien el id sea igual a cero.
				if(($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0)){
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Le pasamos a la vista cual es el ciclo lectivo que debe mostrar seleccionado en el combo de filtrado
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el que haya sido pasado
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo de filtrado
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de las notificaciones registradas para pedirle un listado con todas ellas
					$this->load->model('m_notificacion');
					
					//Cargo la vista donde se muestran las notificaciones y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_personas_mis_notificaciones', $datos, true);
					
					//Cargo la vista principal con los datos de la vista recien generada
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para consultar los registros.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos de la notificacion pasada por la url
	//El segundo parametro solo se utiliza para volver a la pantalla consultar con el mismo criterio de filtrado
	function visualizarNotificacion($idNotificacion=null, $idCicloLectivo=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		//Todas las personas pueden recibir notificaciones por lo que no se requieren permisos extras.
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Segunda comprobacion: Que idNotificacion pasado sea numerico y mayor que cero. Ademas que idCicloLectivo pasado sea numerico y mayor o igual que cero. Que idPersonaLog sea mayor que cero.
			if(is_numeric($idNotificacion) && $idNotificacion>0 && is_numeric($idCicloLectivo) && $idCicloLectivo>=0 && is_numeric($this->session->userdata('idPersonaLog')) && $this->session->userdata('idPersonaLog')>0){
				//Cargo el modelo donde estan los datos de las notificaciones registradas
				$this->load->model('m_notificacion');
				
				//Busco a la notificacion que hay que visualizar para comprobar que existe
				$notificacion = $this->m_notificacion->get($idNotificacion);
				
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que existe
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Tercera comprobacion: Que la notificacion sea existente. Ademas que el ciclo lectivo pasado por la url sea existente o bien el id sea igual a cero.
				if($notificacion->num_rows() == 1 && ($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0)){
					//Le paso la notificacion a visualizar a la vista
					$datos['notificacionSel'] = $notificacion;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Le pasamos a la vista cual es el ciclo lectivo actual.
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el que haya sido pasado.
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////					
					//Cargo la vista donde se muestra el formulario para visualizar una notificacion y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_personas_mis_notificaciones_visualizar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para visualizar un registro
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para visualizar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Abre la pantalla con el formulario para importar personas(0) en formato xml al sistema, con usuario o sin usuarios.
	function abrirPantallaImportar($tipoPersona=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){
			//Segunda comprobacion: Que tipoPersona pasado sea numerico y mayor o igual que cero y menor o igual que cinco.
			if(is_numeric($tipoPersona) && $tipoPersona>=0 && $tipoPersona<=5){
				//Le paso a la vista el tipo de persona a importar
				$datos['tipoPersonaSel'] = $tipoPersona;
				
				//--------------------------------------------------------------------------------------------------------------------------------------------
				//Cargo la vista donde se muestra el formulario para importar personas y la guardo en una variable para pasarsela a la vista principal
				$datosPrincipal['vista'] = $this->load->view('v_personas_importar',$datos, true);
				
				//Cargo la vista principal con los datos de la vista para importar persnas.
				$this->load->view('v_sistema', $datosPrincipal);
			} else {
				//Los parametros pasados no son validos para importar registros.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo importa personas desde un archivo en formato XML. Tambien crea los usuarios si esta habilitada la opcion.
	//La respuesta se muestra en un iframe dentro del formulario.
	function importar(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){	   
			//Segunda comprobacion: Que se haya pasado por post el archivo y si hay que crear los usuarios o no.
			if($this->input->post('usuarios',true) == '1' || $this->input->post('usuarios',true) == '0'){
				//Este es el mensaje que se mostrara al terminar de ejecutar el codigo.
				$mensaje = "";
				
				$nombre_temporal1 = $_FILES['archivo']['tmp_name'];
				$tipo_archivo1 = $_FILES['archivo']['type'];
				$tamano_archivo1 = $_FILES['archivo']['size'];
				
				//Detalles de las configuraciones del archivo a subir (foto en este caso)
				$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/personas/xml";
				$config['allowed_types'] = 'xml';
				$this->load->library('upload', $config);
				
				$ultimoIdInsertado = 0;
				$archivo = '';
				//Si no se subio el archivo hacer lo siguiente
				if (!$this->upload->do_upload('archivo')){
					$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones. No se han importado personas. Posible error: ' . $this->upload->display_errors();
				//Si se subio el archivo hacer lo siguiente
				}else{
					//Datos del archivo subido (XML)
					$upload_data = $this->upload->data();
					$archivo = $upload_data['file_name'];
					$extensionArchivo = $upload_data['file_ext'];
					
					//Mensaje que se va a mostrar
					$mensaje = 'Se ha subido el archivo correctamente.' . $tipo_archivo1;
					
					//Cargo el modelo donde estan los datos de las personas
					$this->load->model('m_persona');
					
					//Cargo el modelo donde estan los datos de los usuarios
					$this->load->model('m_usuario');
					
					$xml = simplexml_load_file("./archivosPrivados-FPCL3QFs6DkBHihS3aJI/personas/xml/".$archivo);
					
					$resultado = 0;
					$resultadoUsuarios = 0;
					$resultadoParcial = 0;
					
					//REVISAR TIPO DOCUMENTO QUE SEA EXISTENTE Y EN CORCORDANCIA CON EL NOMBRE PASADO.
					//REVISAR FECHA NACIMIENTO QUE TENGA EL FORMATO CORRECTO.
					//REVISAR LOCALIDAD Y EL ID QUE SEA EXISTENTE Y EN CORCORDANCIA CON EL NOMBRE PASADO.
					//REVISAR SEXO (LISTO)
					//REVISAR ESTADO (LISTO)
					
					//Recorremos todas las personas del archivo XML y si tienen todos los datos minimos lo cargamos al sistema.
					foreach($xml->personas->persona as $persona){
						//Comprobamos que este cargado los dos datos minimos necesarios que son apellido y nombre de la persona.
						if($persona->apellido != "" && $persona->nombre != ""){
							//Cargamos el helper de seguridad para usar funciones de el, como ser, que se agreguen comillas a todos los strings.
							$this->load->helper('security');
							
							//Comprobamos y filtramos todos los campos de entradas para que tengan tipos validos.
							$apellido = $this->security->xss_clean($persona->apellido);
							$nombre = $this->security->xss_clean($persona->nombre);							
							
							$abreviatura = $this->security->xss_clean($persona->abreviatura);
							if(!$abreviatura != "") $abreviatura = null;
							
							$idTipoDocumento = $this->security->xss_clean($persona->idTipoDocumento);
							if(!(is_numeric($idTipoDocumento) && $idTipoDocumento>0)) $idTipoDocumento = null;
							
							$numeroDocumento = $this->security->xss_clean($persona->numeroDocumento);
							if(!is_numeric($numeroDocumento)) $numeroDocumento = null;
							
							$fechaNacimiento = $this->security->xss_clean($persona->fechaNacimiento);
							if(!$fechaNacimiento != "") $fechaNacimiento = null;
							
							$idLocalidad = $this->security->xss_clean($persona->idLocalidad);
							if(!(is_numeric($idLocalidad) && $idLocalidad>0)) $idLocalidad = null;
														
							$domicilio = $this->security->xss_clean($persona->domicilio);
							if(!$domicilio != "") $domicilio = null;
							
							$telefonoFijo = $this->security->xss_clean($persona->telefonoFijo);
							if(!$telefonoFijo != "") $telefonoFijo = null;
							
							$telefonoCelular = $this->security->xss_clean($persona->telefonoCelular);
							if(!$telefonoCelular != "") $telefonoCelular = null;
							
							$email = $this->security->xss_clean($persona->email);
							if(!$email != "") $email = null;
							
							$facebook = $this->security->xss_clean($persona->facebook);
							if(!$facebook != "") $facebook = null;
							
							$sexo = $this->security->xss_clean($persona->sexo);
							if(!(is_numeric($sexo) && ($sexo==0 || $sexo==1))) $sexo = null;
							
							$descripcion = $this->security->xss_clean($persona->descripcion);
							if(!$descripcion != "") $descripcion = null;
							
							$estado = $this->security->xss_clean($persona->estado);
							if(!(is_numeric($estado) && ($estado==0 || $estado==1))) $estado = 1;
							
							//Creamos la personas con los datos obtenidos del XML
							$resultadoParcial = $this->m_persona->crear($apellido,
																		 $nombre,
																		 $abreviatura,
																		 $idTipoDocumento,
																		 $numeroDocumento,
																		 $fechaNacimiento,
																		 $idLocalidad,
																		 $domicilio,
																		 $telefonoFijo,
																		 $telefonoCelular,
																		 $email,
																		 $facebook,
																		 0,
																		 $sexo,
																		 $descripcion,
																		 $estado,
																		 $this->session->userdata('idUsuarioLog'),
																		 random_string('alnum',20));
							
							//Contamos cuantas personas ya importamos.
							$resultado += $resultadoParcial;
						
							//Si se creó la persona vemos si hay q crear el usuario asociado.
							if($resultadoParcial == 1){
								//Si la persona se ha creado correctamente, vemos si hay que crear el usuario.
								$ultimoIdInsertado = $this->db->insert_id();
								
								//Comprobamos si hay que crearle o no el usuario a la persona recien importada
								if($this->input->post('usuarios',true) == '1'){
									$existeUsuario = 0;
									$usuario = "";
									$i=0;
									do{
										$i++;
										
										//Armo el usuario candidato
										$usuario = strtolower(substr($nombre,0,$i).$apellido);
										
										//Compruebo si el usuario armado existe
										$existeUsuario = $this->m_usuario->existeUsuario($usuario);
									
									}while($existeUsuario==1 && $i<=strlen($nombre));
									
									//Si podemos armar un nombre de usuario con el nombre y apellido y si tiene numero de documento cargado, creamos el usuario.
									if($existeUsuario == 0 && $usuario != "" && $numeroDocumento != ""){
										//Creamos el usuario
										$resultadoParcial = $this->m_usuario->crear($ultimoIdInsertado, $usuario, $numeroDocumento,0,0,0,0,0,0,0,0,1,$this->session->userdata('idUsuarioLog'));
										$resultadoUsuarios += $resultadoParcial;									
									}
								}
							}
						}
					}
					
					if($resultado > 0){
						if($resultado == 1)
							$mensaje .= " Se ha importado " . $resultado . " persona correctamente.";
						else
							$mensaje .= " Se han importado " . $resultado . " personas correctamente.";
						
						$mensaje .= " Se han creado " . $resultadoUsuarios . " usuario/s correctamente.";
					}
				}
				
				echo("<script> alert('".$mensaje."');</script>");
			} else {
				//No se han pasado los parametros necesarios para importar personas.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();			
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo importa personas desde un archivo en formato XML. Tambien crea los usuarios si esta habilitada la opcion.
	//La respuesta se muestra en un iframe dentro del formulario.
	//La version 2 no usa codeigniter para subir archivos.
	function importar2(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){	   
			//Segunda comprobacion: Que se haya pasado por post el archivo y si hay que crear los usuarios o no.
			if($this->input->post('usuarios',true) == '1' || $this->input->post('usuarios',true) == '0'){
				//Este es el mensaje que se mostrara al terminar de ejecutar el codigo.
				$mensaje = "";
				
				//Datos del archivo subido.
				$nombre_archivo1 = $_FILES['archivo']['name'];
				$nombre_temporal1 = $_FILES['archivo']['tmp_name'];
				$tipo_archivo1 = $_FILES['archivo']['type'];
				$tamano_archivo1 = $_FILES['archivo']['size'];
				
				//Datos donde se guardara el archivo.
				$rutaServidor1 = "xml";
				$nombreAgregado = random_string('alnum',5);
				$rutaServidor1 .= "/" . $nombreAgregado ."_". $nombre_archivo1;
				
				$ultimoIdInsertado = 0;
				//Si no se subio el archivo hacer lo siguiente
				if (!move_uploaded_file($nombre_temporal1, $rutaServidor1)){
					$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones. No se han importado personas.';
				//Si se subio el archivo hacer lo siguiente
				}else{
					//Mensaje que se va a mostrar
					$mensaje = 'Se ha subido el archivo correctamente.';
					
					//Cargo el modelo donde estan los datos de las personas
					$this->load->model('m_persona');
					
					//Cargo el modelo donde estan los datos de los usuarios
					$this->load->model('m_usuario');
					
					$xml = simplexml_load_file($rutaServidor1);
					
					$resultado = 0;
					$resultadoUsuarios = 0;
					$resultadoParcial = 0;
					
					//REVISAR TIPO DOCUMENTO QUE SEA EXISTENTE Y EN CORCORDANCIA CON EL NOMBRE PASADO.
					//REVISAR FECHA NACIMIENTO QUE TENGA EL FORMATO CORRECTO.
					//REVISAR LOCALIDAD Y EL ID QUE SEA EXISTENTE Y EN CORCORDANCIA CON EL NOMBRE PASADO.
					//REVISAR SEXO (LISTO)
					//REVISAR ESTADO (LISTO)
					
					//Recorremos todas las personas del archivo XML y si tienen todos los datos minimos lo cargamos al sistema.
					foreach($xml->personas->persona as $persona){
						//Comprobamos que este cargado los dos datos minimos necesarios que son apellido y nombre de la persona.
						if($persona->apellido != "" && $persona->nombre != ""){
							//Cargamos el helper de seguridad para usar funciones de el, como ser, que se agreguen comillas a todos los strings.
							$this->load->helper('security');
							
							//Comprobamos y filtramos todos los campos de entradas para que tengan tipos validos.
							$apellido = $this->security->xss_clean($persona->apellido);
							$nombre = $this->security->xss_clean($persona->nombre);							
							
							$abreviatura = $this->security->xss_clean($persona->abreviatura);
							if(!$abreviatura != "") $abreviatura = null;
							
							$idTipoDocumento = $this->security->xss_clean($persona->idTipoDocumento);
							if(!(is_numeric($idTipoDocumento) && $idTipoDocumento>0)) $idTipoDocumento = null;
							
							$numeroDocumento = $this->security->xss_clean($persona->numeroDocumento);
							if(!is_numeric($numeroDocumento)) $numeroDocumento = null;
							
							$fechaNacimiento = $this->security->xss_clean($persona->fechaNacimiento);
							if(!$fechaNacimiento != "") $fechaNacimiento = null;
							
							$idLocalidad = $this->security->xss_clean($persona->idLocalidad);
							if(!(is_numeric($idLocalidad) && $idLocalidad>0)) $idLocalidad = null;
														
							$domicilio = $this->security->xss_clean($persona->domicilio);
							if(!$domicilio != "") $domicilio = null;
							
							$telefonoFijo = $this->security->xss_clean($persona->telefonoFijo);
							if(!$telefonoFijo != "") $telefonoFijo = null;
							
							$telefonoCelular = $this->security->xss_clean($persona->telefonoCelular);
							if(!$telefonoCelular != "") $telefonoCelular = null;
							
							$email = $this->security->xss_clean($persona->email);
							if(!$email != "") $email = null;
							
							$facebook = $this->security->xss_clean($persona->facebook);
							if(!$facebook != "") $facebook = null;
							
							$sexo = $this->security->xss_clean($persona->sexo);
							if(!(is_numeric($sexo) && ($sexo==0 || $sexo==1))) $sexo = null;
							
							$descripcion = $this->security->xss_clean($persona->descripcion);
							if(!$descripcion != "") $descripcion = null;
							
							$estado = $this->security->xss_clean($persona->estado);
							if(!(is_numeric($estado) && ($estado==0 || $estado==1))) $estado = 1;
							
							//Creamos la personas con los datos obtenidos del XML
							$resultadoParcial = $this->m_persona->crear($apellido,
																		 $nombre,
																		 $abreviatura,
																		 $idTipoDocumento,
																		 $numeroDocumento,
																		 $fechaNacimiento,
																		 $idLocalidad,
																		 $domicilio,
																		 $telefonoFijo,
																		 $telefonoCelular,
																		 $email,
																		 $facebook,
																		 0,
																		 $sexo,
																		 $descripcion,
																		 $estado,
																		 $this->session->userdata('idUsuarioLog'),
																		 random_string('alnum',20));
							
							//Contamos cuantas personas ya importamos.
							$resultado += $resultadoParcial;
						
							//Si se creó la persona vemos si hay q crear el usuario asociado.
							if($resultadoParcial == 1){
								//Si la persona se ha creado correctamente, vemos si hay que crear el usuario.
								$ultimoIdInsertado = $this->db->insert_id();
								
								//Comprobamos si hay que crearle o no el usuario a la persona recien importada
								if($this->input->post('usuarios',true) == '1'){
									$existeUsuario = 0;
									$usuario = "";
									$i=0;
									do{
										$i++;
										
										//Armo el usuario candidato
										$usuario = strtolower(substr($nombre,0,$i).$apellido);
										
										//Compruebo si el usuario armado existe
										$existeUsuario = $this->m_usuario->existeUsuario($usuario);
									
									}while($existeUsuario==1 && $i<=strlen($nombre));
									
									//Si podemos armar un nombre de usuario con el nombre y apellido y si tiene numero de documento cargado, creamos el usuario.
									if($existeUsuario == 0 && $usuario != "" && $numeroDocumento != ""){
										//Creamos el usuario
										$resultadoParcial = $this->m_usuario->crear($ultimoIdInsertado, $usuario, $numeroDocumento,0,0,0,0,0,0,0,0,1,$this->session->userdata('idUsuarioLog'));
										$resultadoUsuarios += $resultadoParcial;									
									}
								}
							}
						}
					}
					
					if($resultado > 0){
						if($resultado == 1)
							$mensaje .= " Se ha importado " . $resultado . " persona correctamente.";
						else
							$mensaje .= " Se han importado " . $resultado . " personas correctamente.";
						
						$mensaje .= " Se han creado " . $resultadoUsuarios . " usuario/s correctamente.";
					}
				}
				
				echo("<script> alert('".$mensaje."');</script>");
			} else {
				//No se han pasado los parametros necesarios para importar personas.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();			
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
}